<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------
namespace app\http\middleware\api;

use app\Request;
use hdphp\exceptions\ApiException;
use hdphp\interfaces\MiddlewareInterface;
use hdphp\services\CacheService;

/**
 * Class：reids锁
 * 创建人：Jack
 * 创建时间：2023/11/21 17:22
 * @package app\http\middleware\api
 */
class BlockerMiddleware implements MiddlewareInterface
{

    /**
     * 注释：handle
     * 创建人：Jack
     * 创建时间：2023/11/21 17:22
     * @param Request  $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle(Request $request, \Closure $next)
    {
        $uid = $request->uid();
        $key = md5($request->rule()->getRule() . $uid);
        if (!CacheService::setMutex($key)) {
            throw new ApiException('请求太过频繁，请稍后再试!');
        }

        $response = $next($request);

        $this->after($response, $key);

        return $response;
    }

    /**
     * 注释：after
     * 创建人：Jack
     * 创建时间：2023/11/21 17:22
     * @param $response
     * @param $key
     * @return void
     */
    public function after($response, $key)
    {
        CacheService::delMutex($key);
    }
}
